/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Application.Elements;

import java.util.List;
import java.util.ArrayList;
/**
 * Jelgeneratort megvalosito osztaly. Az altala kiadott jelet csak
 * konstrualaskor lehet neki megadni.
 * Nem lehet bemenete.
 * @author Stikmann
 */
public class Wavegen extends Element{

    /**
     * A mar megkapott ertekek tarolasara.
     */
    public List<Boolean> sequence;

    /**
     * Az épp kiadott jel száma
     */
    public int index;

    /**
     * Változott e a kimenet a legutóbbi simulate óta
     */
    private boolean changed;

    /**
     * A jelgenerator konstrualasakor kell megadni, milyen jelsorozatot ad ki
     * @param minta A jelsorozatot tartalmazo strng. Formaja: "1001110111", azaz
     * egyesek es nulla sorozata.
     */
    public Wavegen(List<Boolean> minta){
        /* google: "defensive copy" */
        sequence=new ArrayList(minta.size());
        for (boolean elem:minta)
            sequence.add(elem);
    }

    /**
     * A kimenetere a megadott jelsorozat es az aktualisan kiadott jel erteket.
     * @return Ha valtozott a kimenet, true, egyebkent false
     */
    public boolean simulate(){
        if(changed){
            changed=false;
            return true;
        }
        else
            return false;
    }

    /**
     * Lepteti a jelgeneratort, azaz egy indexet. Ha esetleg tulcsordul,
     * elolrol kezdi.
     */
    public void step(){
        ++index;
        if (index>=sequence.size())
            index=0;
        changed=true;
        out=sequence.get(index);
    }

    /**
     * Alapallapotba, azaz az elso jelre allitja a kimenetet.
     */
    @Override
    public void reset(){
        index=0;
        changed=true;
        out=sequence.get(index);
    }

    /**
     * Leellenorzi az elemet. A jelgeneratoroknak nem lehet bemenete, ha megis van, hibat
     * ad vissza.
     * @return Ha nincs hiba, null, ha van, a hibauzenet.
     */
    @Override
    public String check(){
        if (!inputs.isEmpty())
            return "Jelgeneratornak nem lehet bemenete.";
        else
            return null;
    }
}
